Qt学习之使用QListWidget加载本地图片实现双击放大

您所在的位置:网站首页 qlistwidget 缩略图 Qt学习之使用QListWidget加载本地图片实现双击放大

Qt学习之使用QListWidget加载本地图片实现双击放大

2024-07-04 23:15| 来源: 网络整理| 查看: 265

目录

一、前言

二、实现效果

三、代码实现

(1)QListWidget的使用

1、QListWidget初始化

2、QListWidget加载本地图片

3、QListWidget样式表设计

4、QListWidget连接信号与槽

(2)自定义QWidget(显示放大的图片)

1、imageWin构造函数

2、事件过滤器

四、全部代码

1、listWidgetUse头文件(.h)

2、listWidgetUse源文件(.cpp)

3、imageWin头文件(.h)

4、imageWin源文件(.cpp)

一、前言

        QListWidget的列表项显示方式有两种,一种是IconMode(图标模式),一种是ListMode(列表模式),本文介绍IconMode(图标模式)的使用,加载本地图片,双击列表的每一项可以进行图片放大。

二、实现效果

三、代码实现 (1)QListWidget的使用 1、QListWidget初始化

        设置列表项的大小,设置显示模式,设置大小自适应,设置列表项为静态不可移动。

imgList = new QListWidget; imgList->setIconSize(QSize(125,125));//设置单个Icon大小 imgList->setViewMode(QListView::IconMode);//设置显示模式 imgList->setFlow(QListView::LeftToRight);//从左到右 imgList->setResizeMode(QListView::Adjust);//大小自适应 imgList->setMovement(QListView::Static);//设置列表每一项不可移动 2、QListWidget加载本地图片

        加载工程目录下的image/pngImage文件夹里的png和jpg格式的图片,如下图所示。

 代码

//path为QString类型 path=QString(QDir::currentPath()+"/image/pngImage/");//本地图片路径 QDir dir(path); //namefiles和files为QStringList类型 namefilesgeometry();//获取当前窗口坐标及大小 x、y、w、h //通过自定义的窗口显示图片 imageWin *showImageWidget = new imageWin(item , QRect(rect.x(), rect.y()+rect.y()*1/4, rect.width(), rect.height()*2/3)); showImageWidget->show(); } (2)自定义QWidget(显示放大的图片)

        自定义imageWin类继承与QWidget,并重载构造函数。

1、imageWin构造函数

        实现思路为:获取item里的pixmap,然后将pixmap通过QLabel加载显示。

imageWin::imageWin(QListWidgetItem *item, QRect rect, QWidget *parent): QWidget(parent) { qApp->installEventFilter(this); this->setGeometry(rect);//设置显示图片窗口的x、y、w、h this->setFixedSize(rect.width(), rect.height());//设置窗口固定大小 this->setWindowIcon(item->icon()); this->setWindowTitle("查看图片"); this->setWindowModality(Qt::ApplicationModal);//阻塞除当前窗体外的其他所有窗体 //通过QLabel加载item上的图片 QLabel *lab = new QLabel(this); lab->setFixedSize(this->width(), this->height()); lab->setPixmap(item->icon().pixmap(QSize(this->width(), this->height())).scaled(lab->width(),lab->height())); } 2、事件过滤器

        使用事件过滤器主要目的是实现点击窗口的任意位置可以关闭窗口。

//事件过滤器,实现点击窗口任意位置,窗口就可以关闭 bool imageWin::eventFilter(QObject *obj, QEvent *e) { if(e->type() == QEvent::MouseButtonPress) { this->close(); } return QWidget::eventFilter(obj, e); } 四、全部代码 1、listWidgetUse头文件(.h) #ifndef LISTWIDGETUSE_H #define LISTWIDGETUSE_H #include #include #include class listWidgetUse : public QWidget { Q_OBJECT public: explicit listWidgetUse(QWidget *parent = 0); private: QListWidget *imgList; QString path; QStringList namefiles, files; signals: public slots: void enlargeImage(QListWidgetItem *item);//放大图片 }; #endif // LISTWIDGETUSE_H 2、listWidgetUse源文件(.cpp) #include "listwidgetuse.h" #include "imagewin.h" #include #include #include listWidgetUse::listWidgetUse(QWidget *parent) : QWidget(parent) { this->setWindowTitle("listWidget的使用"); this->resize(600, 600); imgList = new QListWidget; imgList->setIconSize(QSize(125,125));//设置单个Icon大小 imgList->setViewMode(QListView::IconMode);//设置显示模式 imgList->setFlow(QListView::LeftToRight);//从左到右 imgList->setResizeMode(QListView::Adjust);//大小自适应 imgList->setMovement(QListView::Static);//设置列表每一项不可移动 path=QString(QDir::currentPath()+"/image/pngImage/");//本地图片路径 QDir dir(path); //namefiles和files为QStringList类型 namefilesshow(); } 3、imageWin头文件(.h) #ifndef IMAGEWIN_H #define IMAGEWIN_H #include #include #include class imageWin : public QWidget { Q_OBJECT public: imageWin(QListWidgetItem *item, QRect rect, QWidget *parent = 0); ~imageWin(); private: QListWidget *imageWidget; QListWidgetItem *item; signals: public slots: protected: bool eventFilter(QObject *obj, QEvent *e); }; #endif // IMAGEWIN_H 4、imageWin源文件(.cpp) #include "imagewin.h" #include #include #include #include imageWin::imageWin(QListWidgetItem *item, QRect rect, QWidget *parent): QWidget(parent) { qApp->installEventFilter(this); this->setGeometry(rect);//设置显示图片窗口的x、y、w、h this->setFixedSize(rect.width(), rect.height());//设置窗口固定大小 this->setWindowIcon(item->icon()); this->setWindowTitle("查看图片"); this->setWindowModality(Qt::ApplicationModal);//阻塞除当前窗体外的其他所有窗体 //通过QLabel加载item上的图片 QLabel *lab = new QLabel(this); lab->setFixedSize(this->width(), this->height()); lab->setPixmap(item->icon().pixmap(QSize(this->width(), this->height())).scaled(lab->width(),lab->height())); } imageWin::~imageWin() { delete this; } //事件过滤器,实现点击窗口任意位置,窗口就可以关闭 bool imageWin::eventFilter(QObject *obj, QEvent *e) { if(e->type() == QEvent::MouseButtonPress) { this->close(); } return QWidget::eventFilter(obj, e); }

原创不易,转载请标明出处。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3